const { HookMap, SyncHook } = require('tapable');

const map = new HookMap(() => new SyncHook(['name'])); // 传入参数为 hook工厂函数，创建一模一样的hook

map.for('key1'); // for: 返回key对应的 hook，如果没有就用工厂函数创建一个,再返回
map.get('key2'); // get: 返回key对应的 hook，没有就返回 undefined

map.for('cat').tap('cat01', (name) => {
  console.log('[cat] 01 receive:', name); // 会执行，打印： [cat] 01 receive: This is Cat
});

map.for('dog').tap('dog02', (name) => {
  console.log('[dog] 02 receive:', name); // 会执行，打印：[dog] 02 receive: This is Dog
});

map.for('apple').tap('03', (name) => {
  console.log('[apple] 03 receive:', name); // 没有调用对应的call，不会执行
});

map.for('cat').call('This is Cat');

map.for('dog').call('This is Dog');

console.log(map.get('boy')); // undefined

console.log(map); // 里面有4个key对应hook，分别是 key1, cat, dog, apple
